from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
# 参数	        价值	        说明
# model	        None	模型文件的路径，即yolov8n.pt,yolov8n.yaml
# data	        None	数据文件的路径，即 coco128.yaml
# epochs	    100	    训练的历元数
# time	        None	训练的小时数，如果已提供，则覆盖纪元数
# patience	    50	    在没有明显改善的情况下，提前停止训练的等待时间
# batch	        16	    每批图像数（-1 表示自动批次）
# imgsz	        640	    输入图像的整数大小
# save	        True	保存列车检查点并预测结果
# save_period	-1	    Save checkpoint every x epochs (disabled if < 1)
# cache	False	true/ram，磁盘或 False。使用缓存加载数据
# device	    None	设备上运行，即 cuda device=0 或 device=0,1,2,3 或 device=cpu
# workers	    8	    加载数据的工作线程数（如果是 DDP，则为每个 RANK）
# project	    None	项目名称
# name	        None	实验名称
# exist_ok	    False	是否覆盖现有实验
# pretrained	True	(bool或str）是使用预训练模型（bool）还是使用模型加载权重（str）
# optimizer	    'auto'	使用的优化器，选择=[SGD、Adam、Adamax、AdamW、NAdam、RAdam、RMSProp、auto]
# verbose	    False	是否打印冗余输出
# seed	        0	    随机种子
# deterministic	True	是否启用确定性模式
# single_cls	False	将多类数据训练为单类数据
# rect	        False	矩形训练，每批都经过整理，以减少填充物
# cos_lr	    False	使用余弦学习率调度器
# close_mosaic	10	    (int)禁用最后历时的马赛克增强（0 表示禁用）。
# resume	    False	 从上一个检查站恢复训练
# amp	        True	自动混合精度 (AMP) 训练，选择=[真，假］
# fraction	    1.0	    要训练的数据集分数（默认为 1.0，训练集中的所有图像）
# profile	    False	记录仪训练期间的ONNX 和TensorRT 速度剖面图
# freeze	    None	(int 或 list，可选）在训练过程中冻结前 n 层，或冻结层索引列表
# lr0	        0.01	初始学习率（即 SGD=1E-2, Adam=1E-3）
# lrf	        0.01	最终学习率 (lr0 * lrf)
# momentum	    0.937	新元动量/亚当贝塔1
# weight_decay	0.0005	优化器权重衰减 5e-4
# warmup_epochs	3.0	    预热时间（可以是分数）
# warmup_momentum	0.8	热身 初始动力
# warmup_bias_lr	0.1	预热初始偏置
# box	        7.5	    箱内损失收益
# cls	        0.5	    CLS 损耗增益（按像素缩放）
# dfl	        1.5	    DFL 损失收益
# pose	        12.0	姿势损失增益（仅姿势）
# kobj	        2.0	    关键点对象损失增益（仅姿势）
# label_smoothing	0.0	标签平滑（分数）
# nbs	        64	    标称批量
# overlap_mask	True	遮罩应在训练期间重叠（仅分段训练）
# mask_ratio	4	    掩码下采样率（仅限段列车）
# dropout	    0.0	    使用 dropout 正则化（仅对火车进行分类）
# val	        True	在培训期间验证/测试
# plots	        False	在训练/评估过程中保存绘图和图像

# 从最后的训练节点继续训练
# Load a model
# model = YOLO('path/to/last.pt')  # load a partially trained model
# Resume training
# results = model.train(resume=True)